</> A WALKTHROUGH
A TypeDB‑powered, ontology‑backed notebook for agentic curation — one framework, many domains.
Brief
"The duty of the man who investigates the writings of scientists, if learning the truth is his goal, is to make himself an enemy of all that he reads, and, applying his mind to the core and margins of its content, attack it from every side."
— Ibn al‑Haytham · 965–1039 AD
Origin
2018 — 2022
Literature curation
Hand‑curated metadata pipelines for biomedical papers. Brittle, expensive, single‑domain.
CZI
Alhazen v1
First pass: heavy framework, bespoke runtime, single biomedical use‑case baked in.
2025 — 2026
Skillful Alhazen
Reimagined around Claude Code, TypeDB 3.x, and a skills marketplace. Domain becomes a plug‑in.
Today
CAIS 2026 + 6 demos
Same framework now powers career, journalism, and rare‑disease curation skills.
The thesis
— what most stacks do
Dump everything to MD files or an opaque RAG blob. Fine for chat. Useless when you need to ask which and why.
— what we do
Typed entities, typed relations, typed notes — persistent across sessions, queryable across skills.
— the lesson, recalled
Bioinformatics taught us data hygiene 20 years ago. Let's not forget it now.
The shape of the system
You talk; the agent curates. Claude Code for interactive work, OpenClaw for a persistent local or VPS service.
runtime layer
The schema defines what the agent reasons about. The data is what it has learned so far. Persistent across sessions.
memory layer
A typed schema namespace, a Python CLI, agent instructions — optionally a dashboard. Self‑contained directory.
extension layer
Boxes & arrows
Operator
You.
Researcher, curator,
analyst.
Agent runtime
Claude Code
interactive · skills via .claude/skills/
OpenClaw
persistent service · Mac mini / VPS
Evolution loop
Schema gaps
PostToolUse hook
↓
file‑schema‑gap CLI
↓
GitHub issue → PR
↓
schema.tql merged
Skill dispatch
scientific‑literature
SKILL.md · .tql · CLI
jobhunt
SKILL.md · .tql · CLI
dismech
SKILL.md · .tql · CLI
+ skill
git clone · register
Typed memory + spillover
TypeDB 3.x
typed entity hierarchy · skill‑namespaced
Artifact cache
~/.alhazen/cache/
Qdrant
semantic search · scilit
The notebook model
Everything inherits from alh‑identifiable‑entity. The hierarchy is the part that does not change per skill — skills extend the leaves with namespaced sub‑types.
Schema
</> alh-identifiable-entity// abstract root — id, name, description, provenance alh-identifiable-entity ├── alh-domain-thing // real-world objects │ ├── agent // person · ai-agent │ │ └── person // linkedin · email · bio │ ├── alh-role // anti-rigid (BFO/UFO) │ ├── organization │ └── interaction // meeting · email · interview ├── collection // typed sets │ ├── scilit-corpus │ ├── jhunt-search │ └── apm-case-file └── alh-information-content // content-bearing ├── artifact // raw — pdf · html · email ├── fragment // extracted piece └── note // Claude's analysis
local_resources/typedb/alhazen_notebook.tql
Anatomy of a skill
Anatomy
skills/jobhunt/ ├── SKILL.md // triggers · workflows · commands ├── skill.yaml // metadata · namespace prefix ├── schema.tql // TypeDB extension ├── jobhunt.py // the verbs Claude calls ├── quality-checks.yaml └── dashboard/ // optional Next.js
Single source of truth: skills-registry.yaml. Core skills with path:, externals with git:. make build-skills resolves the registry, drops symlinks, loads schemas.
Contract
Every skill contributes four things:
Marketplace pattern
Skills live in their own git repos. To add one: git, register, build. No platform, no plugin runtime, no SDK — just a directory and a CLI.
Hard problem · one
Standard agent stacks treat "I can't represent this" as a silent skip. We treat it as the most important signal in the system.
Two failure modes
| EXECUTION | Tool crash · empty result · API down → standard error log + retry |
| SCHEMA GAP | TypeDB write rejected · concept has no type → filed as a structured GitHub issue |
The evolution loop
Schema gaps are signal, not noise. They are how the graph grows from use, not from upfront design.
Hard problem · two
— constraints
— moves
Tradeoff accepted
Less control over the agent loop. We don't own the orchestrator — a Claude Code change can move things under us.
Win banked
~10× less code to maintain. Onboarding a new skill is one PR. Iteration speed is the moat.
Hard problem · three
Markdown notes
Drift & duplicate.
Same fact in three files, slightly different. No way to ask “which”.
RAG only
Opaque blob.
Useful for retrieval, useless for audit. Can't introspect what's in there.
TypeDB notebook
Typed & queryable.
Multi‑hop questions across skills. Provenance on every claim.
Example query — only possible because the schema is real
// "Every contact who flagged a skill gap, grouped by funding stage." match $c isa jhunt-contact, has name $cname; $g isa jhunt-skill-gap-note, has content $gtxt; $co isa jhunt-company, has stage $stage; (mentioner: $c, mention: $g) isa jhunt-mention; (employee: $c, employer: $co) isa alh-works-at; fetch $cname; $stage; $gtxt;
RAG & MD are still here when they're the right tool — the notebook adds structure on top, not instead.
What's deployed
| Skill | Type | Domain | What it does | UI |
|---|---|---|---|---|
| scientific-literature | external | Biomedical | Multi‑source literature search · PubMed · Europe PMC · OpenAlex · semantic search via Voyage AI + Qdrant | — |
| alg‑precision‑therapeutics | external | Rare disease | Investigate mechanism of harm and therapeutic landscape from a MONDO diagnosis | ✓ |
| dismech | external | Disease mechanisms | Browse the DisMech knowledge graph — 750+ curated mechanism entries | — |
| literature-trends | external | Research analysis | Trace how explanatory hypotheses evolve over time in a tagged corpus | — |
| jobhunt | external | Career | Track positions and engagements · fit analysis · skill‑gap identification | ✓ |
| they‑said‑whaaa | external | Journalism | Track public‑figure consistency — extract claims, detect contradictions across sources | ✓ |
In practice
Position · contact · interview · fit‑analysis‑note — all live in TypeDB. The dashboard is one of the skill's optional contributions. Same backend powers the dismech mechanism browser and the scientific-literature corpora views.
Outcomes
Recognition
CAIS
Accepted at CAIS 2026.
ACM Conference on Agents and Agent Systems.
Working demos
Across biomedicine, careers, journalism — three deploy targets, one codebase.
Adoption surface
Claude Code · OpenClaw on Mac mini · OpenClaw on a hardened VPS.
Honest lessons — open work
Schema migration
When an attribute type changes, existing data needs migration. Today: re‑ingest. Need a real path.
Concurrent gap PRs
Two open gap fixes can touch the same entity. No tooling to detect the conflict yet.
Proposed vs. committed
All schema changes go straight to schema.tql. Want a real intermediate state.
Q & A · 40 min
Three areas I want to argue with you about — please be brutal.
Domain coverage at Altos
What does this notebook look like sitting under a real cell‑programming or rejuvenation workflow?
Schema governance at scale
When twenty skills share the core hierarchy, who arbitrates? What's the review cadence?
Notebook ↔ lab memory
Where's the boundary between agent memory and the systems of record — LIMS, ELN, sequencing pipelines?